package projeto.lp2.grupo6.view;

import java.awt.Dimension;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import projeto.lp2.grupo6.logica.Estabelecimento;
import projeto.lp2.grupo6.logica.SistemaRecomendacaoFacade;

/**
 * Aluno:
 *      Guilherme Monteiro
 * 	Italo Guedes
 * 	Tiago Leite
 *
 * @author guilhermemg
 * @author tiagoln
 * @author italogas
 */
public class JDialogEstatistica extends javax.swing.JDialog {

    /**
	 * 
	 */
	private static final long serialVersionUID = -1469892908185020825L;

	/** Creates new form JDialogEstatistica */
    public JDialogEstatistica(Estabelecimento estabelecimento) throws Exception {
        if (estabelecimento == null) {
            throw new Exception("Erro de estabelecimento nulo.");
        }
        JPanel painelGrafico = new ChartPanel(geraGraficoIndividual(estabelecimento.getNome(),
                SistemaRecomendacaoFacade.geraEstatistica(estabelecimento, SistemaRecomendacaoFacade.getUsuarios())));
        setContentPane(painelGrafico);
        initComponents();
    }

    public JDialogEstatistica(List<Estabelecimento> listaDeEstabelecimentos) throws Exception {
        if (listaDeEstabelecimentos == null) {
            throw new Exception("Erro de lista nula.");
        }
        JPanel painelGrafico = new ChartPanel(geraGraficoGeral(listaDeEstabelecimentos));
        painelGrafico.setPreferredSize(new Dimension(900, 650));
        setContentPane(painelGrafico);
        initComponents();
        this.setSize(900, 650);
        this.setLocationRelativeTo(null);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Estat?sticas");
        setModal(true);
        setResizable(false);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 681, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 431, Short.MAX_VALUE)
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-681)/2, (screenSize.height-453)/2, 681, 453);
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

    private JFreeChart geraGraficoIndividual(String nomeEstabelecimento, List<Integer> listaDados) {
        int soma = 0;
        for (int valor : listaDados) {
            soma += valor;
        }
        DefaultPieDataset graficoPizza = new DefaultPieDataset();
        graficoPizza.setValue("Opinioes Positivas = " + (listaDados.get(0) * 100 / soma) + "% |", listaDados.get(0));
        graficoPizza.setValue("Opinioes Negativas = " + (listaDados.get(1) * 100 / soma) + "% |", listaDados.get(1));
        graficoPizza.setValue("Nao Conhece = " + (listaDados.get(2) * 100 / soma) + "% |", listaDados.get(2));
        JFreeChart chart = ChartFactory.createPieChart(nomeEstabelecimento, graficoPizza, true, false, false);
        return chart;
    }

    private JFreeChart geraGraficoGeral(List<Estabelecimento> listaDeEstabelecimentos) {
        DefaultCategoryDataset graficoGeral = new DefaultCategoryDataset();
        //int cont = 0;
        for (Estabelecimento estabelecimento : listaDeEstabelecimentos) {
            List<Integer> dadosEstatistica = null;
            try {
                dadosEstatistica = SistemaRecomendacaoFacade.geraEstatistica(estabelecimento,
                        SistemaRecomendacaoFacade.getUsuarios());
            } catch (Exception ex) {
                Logger.getLogger(JDialogEstatistica.class.getName()).log(Level.SEVERE, null, ex);
            }
            //double dados[][] = new double[cont][(dadosEstatistica.get(0) + dadosEstatistica.get(1)) / 2];
            graficoGeral.setValue((dadosEstatistica.get(0) - dadosEstatistica.get(1)), "Numero de avaliacoes positivas - Numero de avaliacoes negativas", estabelecimento.getNome());
        }
        JFreeChart chart = ChartFactory.createBarChart("Estatistica Geral", "Estabelecimentos", "Aceitacao", graficoGeral, PlotOrientation.HORIZONTAL, true, false, false);
        return chart;
    }
}
